﻿<!DOCTYPE html>
<html lang="zh">
<head>
 <meta charset="utf-8">
 <title>CSS vertical-align属性_CSS垂直对齐_揭秘CSS世界-歪脖网</title>
 <meta name="keywords" content="CSS, CSS3, 揭秘CSS, , vertical-align,vertical-align属性,CSS vertical-align属性,CSS垂直对齐" />
 <meta name="description" content="vertical-align属性用来当一个行内级框 的高度小于包含它的行框高度时，行内级框在行框中垂直对齐的位置" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
 <link href="http://localhost/waibo/css/bootstrap.min.css" rel="stylesheet" />
 <link href="http://localhost/waibo/css/bootstrap-responsive.min.css" rel="stylesheet" />
 <link href="http://localhost/waibo/css/style.css" rel="stylesheet" />

 <script src="http://localhost/waibo/js/jquery.js"></script>
 <script src="http://localhost/waibo/js/script.js"></script>
</head>

<body>
 <div class="topbar">
 <div class="eyebrow hidden-phone">
 <div class="container">
 <ul class="pull-left">
   <li><a href="http://www.waibo.wang/" target="_blank">歪脖网</a>欢迎您！</li>
 </ul>
 <ul class="pull-right">
  <li><a href="http://www.waibo.wang/user/">登录</a></li>
  <li class="b">|</li>
  <li><a href="http://www.waibo.wang/user/register.asp" target="_blank">注册</a></li>
 </div>
 </div>

<div class="topnav">
<div class="container">
  <div class="row-fluid mtz">
  <div class="span3 topnav-logo">
    <a href="http://www.waibo.wang/"><p class="logo-cn">歪脖网</p><p class="logo-en hidden-phone">waibo.wang</p></a>
  </div>
  <div class="span6 nav">
   <ul>
     <li ><a href="http://www.waibo.wang/">首页</a></li>
     <li class="active"><a href="http://localhost/waibo/bible/">教程</a></li>
     <li ><a href="http://www.waibo.wang/wiki/">专栏</a></li>
     <li ><a href="http://www.waibo.wang/demo/">素材</a></li>
     <li ><a href="http://www.waibo.wang/tools/">工具</a></li>
   </ul>
  </div>
  <div class="span3 topnav-form">
  </div>
 </div>
 </div>
 </div>
 </div>


 <div class="container">
 <div class="row-fluid bible">
 <aside class="span3">
 <map id="oAll" name="oAll">
 <area title="全部展开" shape="rect" coords="0,0,22,20"  href="javascript:tree.openAll();" onfocus="blur(this);">
 <area title="全部收起" shape="rect" coords="22,0,44,20" href="javascript:tree.closeAll();" onfocus="blur(this);">
 </map>
 <header><span>目录</span><img src="http://localhost/waibo/img/map.png" usemap="#oAll"/></header>
 <script src="http://localhost/waibo/js/dtree.js"></script>
 <script src="http://localhost/waibo/bible/css3/js/tree.js"></script>
 <script>
    createTree("30205");
 </script>
 </aside>

 <main class="span9">
 <header><div class="name"><strong>揭秘CSS</strong>(第 1 版)</div><div class="section">3.2.5 垂直对齐</div></header>
 <div><label id="treeview"><input id="show" type="checkbox" checked /> 文档结构视图</label><span class="hit">阅读（ <span id="hit"></span> ）</div>
 <article>
<h1 class="hide-text">概述</h1>
<h1 class="hide-text">CSS选择器</h1>
<h1 class="hide-text">字体和文本</h1>
<h2 class="hide-text">字体</h2>
<h2 class="hide-text">文本</h2>
<h3 class="hide-text">行高</h3>
<h3 class="hide-text">水平对齐</h3>
<h3 class="hide-text">水平对齐</h3>
<h3 class="hide-text">文本缩进</h3>
<h3>垂直对齐</h3>
<p>在CSS中，行框的高度总是足以容纳它包含的所有行内级框，当一个行内级框 B 的高度小于包含它的行框高度时，则由 <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_all.html' title='vertical-align属性效果演示' target='_blank'>vertical-align属性</a> 来决定B在行框中垂直对齐的位置。因此，vertical-align属性只对行内级元素有效，对块级元素无效。并且，该属性不能被子元素继承。</p><p>在垂直对齐时，行内非替换元素的行内级框是由 line-height 的高度定义的框，即在内容区的上下各添加半行距后的框；其他行内级元素的行内级框是由 margin-box 定义的框。因此，对一个行内级框来说，top 是指框的上边界，bottom 是指框的下边界，text-top 是指内容区的上边界，text-bottom 是指内容区的下边界。</p><p>由于替换元素没有 baseline，因此，就把它的 bottom 作为 baseline，即 baseline 和 bottom 的位置相同。</p><p>middle 是指框高度一半的位置，对于替换元素，就是 height 的一半的位置，而非替换元素则是基于 baseline 往上移动 0.5ex，即小写字母 x 的正中心。但是，很多浏览器往往把 ex 这个单位定义为0.5em，导致 middle 其实不一定是 x 的正中心。如图 3‑15 所示：</p><figure><img src='http://localhost/waibo/bible/css3/img/3/vertical-align1.png' title='行内级框' alt='行内级框'><figcaption>图3-15  行内级框</figcaption></figure><p>vertical-align属性可以使用长度值、百分比、或预定义关键字，来定义行内级框的垂直对齐方式。该属性的默认值是 baseline，也就是说，默认情况下，所有行内级框的基线都与父元素的基线对齐。</p><p>使用长度值和百分比时，通过让行内级框的基线相对父元素的基线，升高或降低指定的距离，来决定行内级框在行框中的位置。距离可以是正值，也可以是负值。正值使行内级框相对父元素的基线升高，负值则降低。</p><p>使用长度值时，可以使用绝对单位或相对单位，来指定升高或降低的距离，0cm 等同于 baseline。假设在一个段落中，包含一个 span 元素：</p><pre class="prettyprint linenums"><code>&lt;p&gt;xgh&lt;span&gt;&lt;span&gt;xgh&lt;/p&gt;&lt;/code&gt;</code></pre><p>假设设置段落的字体大小为 120px，span 元素的字体大小为 40px、vertical-align 的值为 20px：</p><pre class="prettyprint linenums"><code>p {  font-size: 120px;}span {  font-size: 40px;	vertical-align: 20px;}</code></pre><p>由于vertical-align 的值为 20px，所以，行内框 span 的基线相对父元素的基线升高 20px。运行结果如图 3‑16 所示：</p><figure><img src='http://localhost/waibo/bible/css3/img/3/vertical-align2.png' title='vertical-align为长度值' alt='vertical-align为长度值'><figcaption>图3-16  vertical-align为长度值</figcaption></figure><p>使用百分比时，升高或降低的距离是根据行内元素的 line-height 进行计算，0% 等同于 baseline。</p><p>如果把 span 元素的 line-height 设置为 1，vertical-align 设置为 50%，则得到的行高为 40px，进而得到升高的距离为 50% * 40px = 20px，也会得到相同的效果。</p><pre class="prettyprint linenums"><code>span {  line-height: 1;  font-size: 40px;  vertical-align: 50%;}</code></pre><p>使用预定义关键字时，是根据预定义的对齐准则，来决定行内级框在行框中的位置。预定义关键字有 <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_baseline.html' title='vertical-align:baseline效果演示' target='_blank'>baseline</a> | <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_sub.html' title='vertical-align:sub效果演示' target='_blank'>sub</a> | <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_super.html' title='vertical-align:super效果演示' target='_blank'>super</a> | <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_top.html' title='vertical-align:top效果演示' target='_blank'>top</a> | <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_text-top.html' title='vertical-align:text-top效果演示' target='_blank'>text-top</a> | <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_middle.html' title='vertical-align:middle效果演示' target='_blank'>middle</a> | <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_bottom.html' title='vertical-align:bottom效果演示' target='_blank'>bottom</a> | <a href='http://www.waibo.wang/bible/css3/demo/3/vertical-align_text-bottom.html' title='vertical-align:text-bottom效果演示' target='_blank'>text-bottom</a>，默认值为baseline。根据W3C规范，不同取值的含义见表 3‑4：</p><table summary="vertical-align属性值及含义">	<caption>表 3-4 vertical-align属性值及含义</caption>	<thead>		<tr>		<th>属性值</th><th>含义</th>		</tr>	</thead>	<tbody><tr><td>baseline</td><td>基线对齐。行内框的基线与父元素的基线对齐</td></tr><tr><td>sub</td><td>下标对齐。将行内框的基线下降到父元素适合下标的位置</td></tr><tr><td>super</td><td>上标对齐。将行内框的基线上升到父元素适合下标的位置</td></tr><tr><td>top</td><td>顶部对齐。行内框的顶线与行框的顶线对齐。</td></tr><tr><td>text-top</td><td>文本顶部对齐。行内框的顶线与父元素的text-top对齐</td></tr><tr><td>middle</td><td>居中对齐。行内框的中线与父元素的中线对齐</td></tr><tr><td>bottom</td><td>底部对齐。行内框的底线与行框的底线对齐</td></tr><tr><td>text-bottom</td><td>文本底部对齐。行内框的底线与父元素的text-bottom对齐</td></tr>	</tbody></table><p>基线对齐要求一个行内级框的基线与行框的基线对齐，而对于图像和表单输入元素和其他替换元素，由于它们本身没有基线，则将它们的底线与行框的基线对齐。这就使得浏览器总把替换元素的底线放在基线上，即便该行中没有其他文本。</p><p>上标对齐和下标对齐时，是行内元素的基线（图片和文本输入框的底线）相对于行框的基线上移或下移。而行内元素基线相对于行框的基线移动的距离，CSS规范中未明确规定，由浏览器自行决定，可能会因为浏览器的不同而不同。从上图的运行结果看，在Google Chrome浏览器下，移动的距离约为 1ex。</p><p>middle居中对齐，是行内元素的中线与行框的中线对齐。前面已经介绍，元素的中线与基线的距离为小写字母x高度（即ex）的一半，而大部分浏览器简单的认为1ex = 1em，因此会将基线以上二分之一em处（其实不一定是x的正中心），作为文本的中线。前面已经介绍，一个框的高度是由line-height决定的，如果增加行高，框的高度会增加，顶线就会上移，底线会下移。无论底线下移多少，bottom对齐，始终是元素的底线与行框的底线对齐；top对齐，始终是元素的顶线与行框的顶线对齐。增加行高时，行框的高度会增加，但内容区的高度始终保持不变，text-top对齐就是行内元素的顶线与行框文本的顶线对齐。</p><p>垂直对齐的预定义关键字看似简单，其实很难理解，处理起来也很棘手。下面通过一个简单实例，来看看每个预定义关键字的效果。假设在一个段落中，有 8 个 span 元素：</p><pre class="prettyprint linenums"><code>&lt;p&gt;xgh&lt;span&gt;baseline&lt;/span&gt;…&lt;span&gt;top&lt;/span&gt;&lt;/p&gt;</code></pre><p>为段落定义 1.8 倍的行距，并让每个子元素 span 以不同的方式垂直对齐。由于子元素 span 会继承父元素的 line-height 属性，因此，把 span 元素的行距重置为1：</p><pre class="prettyprint linenums"><code>p {   line-height: 1.8;  font-size: 90px;  font-family: "Times New Roman";  border: 1px solid #444;}span {  line-height: 1;  color: #00f;  font-size: 20px;}span:nth-child(1) {  vertical-align: baseline;}…span:nth-child(8) {  vertical-align: top;	}</code></pre><p>在Google Chrome浏览器下的运行效果如图 3‑17 所示：</p><figure><img src='http://localhost/waibo/bible/css3/img/3/vertical-align3.png' title='vertical-align属性效果' alt='vertical-align属性效果'><figcaption>图3-17  vertical-align属性效果</figcaption></figure><p>虽然W3C规范对 vertical-align属性已经定义得非常清楚，然而，现实的情况是，不同浏览器的解释却千差万别，甚至与规范相去万里。比如，在增加行高时，行框的高度会增加，text-top对齐将会是行内元素的顶线与行框文本的顶线对齐。但从运行结果看，并不是这个样子，似乎是行内元素的基线与行框文本的顶线对齐。</p><p>在所有的CSS属性中，vertical-align属性是最让人费解的一个，因为几乎在所有浏览器下的表现都各不相同，让人匪夷所思。</p><div class="author">
<p class="about">关于作者</p>
<p><a href="https://weibo.com/leiqikui">歪脖先生</a>，十五年以上软件开发经验，酷爱Web开发，精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等，著有《<a href="http://www.waibo.wang/bible/html5/">HTML宝典</a>》、《<a href="http://www.waibo.wang/bible/css3/">揭秘CSS</a>》、《<a href="http://www.waibo.wang/bible/less/">Less简明教程</a>》、《<a href="http://www.waibo.wang/bible/bootstrap2/">Bootstrap2用户指南</a>》、《<a href="http://www.waibo.wang/bible/bootstrap3/">Bootstrap3实用教程</a>》、《<a href="http://www.waibo.wang/bible/bootstrap4/">Bootstrap4源码剖析</a>》，并全部在 <a href="https://github.com/leiqikui">GitHub</a> 上开源。</p>
</div>

<div id="modalReward" class="modal hide fade modal-reward" tabindex="-1">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h6>打赏</h6>
</div>
<div class="modal-body">
<div class="tabbable reward-weipay">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#weipay1">￥1</a></li>
<li><a data-toggle="tab" href="#weipay2">￥2</a></li>
<li><a data-toggle="tab" href="#weipay5">￥5</a></li>
<li><a data-toggle="tab" href="#weipay10">￥10</a></li>
<li><a data-toggle="tab" href="#weipay20">￥20</a></li>
<li><a data-toggle="tab" href="#weipayrand">其他金额</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="weipay1">
<img src="http://localhost/waibo/img/weipay1.png" alt="￥1"><span>￥1</span>
</div>
<div class="tab-pane" id="weipay2">
<img src="http://localhost/waibo/img/weipay2.png" alt="￥2"><span>￥2</span>
</div>
<div class="tab-pane" id="weipay5">
<img src="http://localhost/waibo/img/weipay5.png" alt="￥5"><span>￥5</span>
</div>
<div class="tab-pane" id="weipay10">
<img src="http://localhost/waibo/img/weipay10.png" alt="￥10"><span>￥10</span>
</div>
<div class="tab-pane" id="weipay20">
<img src="http://localhost/waibo/img/weipay20.png" alt="￥20"><span>￥20</span>
</div>
<div class="tab-pane" id="weipayrand">
<img src="http://localhost/waibo/img/weipayrand.png" alt="￥随意"><span>￥随意</span>
</div>
</div>
</div>
<div class="tabbable reward-alipay hide">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#alipay1">￥1</a></li>
<li><a data-toggle="tab" href="#alipay2">￥2</a></li>
<li><a data-toggle="tab" href="#alipay5">￥5</a></li>
<li><a data-toggle="tab" href="#alipay10">￥10</a></li>
<li><a data-toggle="tab" href="#alipay20">￥20</a></li>
<li><a data-toggle="tab" href="#alipayrand">其他金额</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="alipay1">
<img src="http://localhost/waibo/img/alipay1.png" alt="￥1"><span>￥1</span>
</div>
<div class="tab-pane" id="alipay2">
<img src="http://localhost/waibo/img/alipay2.png" alt="￥2"><span>￥2</span>
</div>
<div class="tab-pane" id="alipay5">
<img src="http://localhost/waibo/img/alipay5.png" alt="￥5"><span>￥5</span>
</div>
<div class="tab-pane" id="alipay10">
<img src="http://localhost/waibo/img/alipay10.png" alt="￥10"><span>￥10</span>
</div>
<div class="tab-pane" id="alipay20">
<img src="http://localhost/waibo/img/alipay20.png" alt="￥20"><span>￥20</span>
</div>
<div class="tab-pane" id="alipayrand">
<img src="http://localhost/waibo/img/alipayrand.png" alt="￥随意"><span>￥随意</span>
</div>
</div>
</div>
<div class="reward-method">
<label><input type="radio" name="method" value="weipay" checked><img src="http://localhost/waibo/img/weipay.png" alt="微信支付"></label>
<label><input type="radio" name="method" value="alipay"><img src="http://localhost/waibo/img/alipay.png" alt="支付宝"></label>
</div>
</div>
</div>
<div class="reward">
<p>如果本教程对您帮助很大，请随意打赏。您的支持，将鼓励我写出更好的教程！</p>
<a data-toggle="modal" href="#modalReward">赏</a>
</div>

<script src="http://localhost/waibo/js/bootstrap.min.js"></script>
 <script>
 $(function() {
    rewardMethod();
 });
 </script>
 
<div class="share">
 <div class="bdsharebuttonbox"></div>
 </div>
 <div class="page">
   <a id="prev" href="http://localhost/waibo/bible/css3/html/3/3.2.4.html" title="&#8592; 键到上一节">« 上一节</a>&#8592; 键盘方向键翻页 &#8594;<a id="next" href="http://localhost/waibo/bible/css3/html/3/3.2.6.html" title="&#8594; 键到下一节">下一节 »</a>
 </div>
 </article>
 </main>
 </div>
 </div>
 <div class="floatPanel">
	 <div class="ctrolPanel">
		 <a href="javascript:;" class="arrow top" onClick="goTop()"><span>返回顶部</span></a>
    <a href="#" class="phone"  data-target="#phone"><span>手机访问</span></a>
    <a href="#" class="wechat" data-target="#wechat"><span>关注微信</span></a>
    <a href="javascript:;" class="arrow bottom" onClick="goBottom()"><span>返回底部</span></a>
  </div>
	<div id="phone" class="popPanel">
		<div class="popPanel-inner">
			<img src="http://localhost/waibo/img/site.png" /><p class="slogan">扫码访问歪脖网</p><p>随时随地，想看就看</p>
		</div>
	</div>
	<div id="wechat" class="popPanel">
		<div class="popPanel-inner">
			<img src="http://localhost/waibo/img/weixin.png" /><p class="slogan">关注歪脖网微信</p><p>分享 web 知识、交流 web 经验</p>
		</div>
	</div>
</div>
 <footer>
 <div class="container hidden-phone">
 <div class="row-fluid">
 <div class="span2">
 <dl>
 </dl>
 </div>
 <div class="span2">
 <dl>
    <dl>
      <dt>教程</dt>
      <dd><a href="http://localhost/waibo/bible/html5/">HTML5宝典</a></dd>
      <dd><a href="http://localhost/waibo/bible/css3/">探究CSS3</a></dd>
      <dd><a href="http://localhost/waibo/bible/json/">JSON 教程</a></dd>
      <dd><a href="http://localhost/waibo/bible/es6/">ES6标准入门</a></dd>
      <dd><a href="http://localhost/waibo/bible/bootstrap2/">Bootstrap教程</a></dd>
      <dd><a href="http://localhost/waibo/bible/xcx/">微信小程序教程</a></dd>
    </dl>
 </dl>
 </div>
 <div class="span2">
 <dl>
    <dl>
     <dt>工具</dt>
     <dd><a href="http://www.waibo.wang/tools/htmlformat">HTML格式化</a></dd>
     <dd><a href="http://www.waibo.wang/tools/cssformat">CSS格式化</a></dd>
     <dd><a href="http://www.waibo.wang/tools/htmlconvert">HTML多功能转换器</a></dd>
     <dd><a href="http://www.waibo.wang/tools/xmltojson">XML和JSON转换工具</a></dd>
     <dd><a href="http://www.waibo.wang/tools/jsconfuse">JS混淆工具</a></dd>
     <dd><a href="http://www.waibo.wang/tools/jsonp">JSON在线解析</a></dd>
     <dd><a href="http://www.waibo.wang/tools/markdown">在线Markdown编辑器</a></dd>
    </dl>
 </dl>
 </div>
 <div class="span2">
 <dl>
    <dl>
     <dt>关注</dt>
    </dl>
    <div class="social">
      <img src="http://localhost/waibo/img/weixin.png" title="扫描二维码，关注歪脖网微信">
<a href="https://weibo.com/leiqikui" title="新浪微博" target="_blank"></a>
<a href="http://t.qq.com/maifang51" title="腾讯微博" target="_blank"></a>
<a href="https://github.com/leiqikui" title="Github" target="_blank"><svg width="24" height="24" version="1.1" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a>
    </div>
 </dl>
 </div>
 <div class="span2">
 <dl>
    <dl>
     <dt>赞助商</dt>
     <dd><a rel="nofollow" href="https://cloud.tencent.com/redirect.php?redirect=1005&cps_key=2291d007f3b4d08b96c0fc03c4b54499" target="_blank" title="腾讯云提供安全、稳定的云服务器"><img src="http://localhost/waibo/img/logo-qqyun.png"> 腾讯云</a></dd>
     <dd><a rel="nofollow" href="https://s.click.taobao.com/t?e=m%3D2%26s%3DJm1BMj9ta3QcQipKwQzePCperVdZeJviEViQ0P1Vf2kguMN8XjClAjPr0N2Hh94K6bMO9Kiim77lHsPu4n7AVmGhnzSVk4DlmWL0QXDWLBr%2BSLtF1Lx83hmIkXBqRClNTcEU%2BDykfuSM%2BhtH71aX6uIOTs4KMj3yjpOyWSRdiSZDEm2YKA6YIrbIzrZDfgWtwGXLU4WXsy8CZuZoOOkzXFxfvOyje0ynomfkDJRs%2BhU%3D" target="_blank" title="阿里云全民云计算"><img src="http://localhost/waibo/img/logo-aliyun.png">&nbsp; 阿里云</a></dd>
    </dl>
 </dl>
 </div>
 </div>
 </div>
 <hr/>
   <p>Copyright&copy;2017&nbsp;&nbsp;www.waibo.wang All Rights Reserved</p>
   <p>陕ICP备17020676号-1&nbsp;&nbsp;&nbsp;&nbsp;客服QQ：376601179&nbsp;&nbsp;&nbsp;&nbsp;邮箱：376601179#qq.com
 </footer>
 <script src="http://localhost/waibo/js/prettify.js"></script>
 <script>
 $(function() {
    prettyPrint();
    bible();
    load();
 });
 </script>
</body>
</html>
